#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
排班监控命令行工具
用于启动排班监控，显示倒计时和进度
"""

import sys
import time
import argparse
import threading
import signal
from typing import Optional

from app import create_app
from app.schedule_monitor_integration import start_monitor, stop_monitor, monitored_auto_schedule
from config_params import three_shift_params


def parse_args():
    """解析命令行参数"""
    parser = argparse.ArgumentParser(description="排班监控命令行工具")
    parser.add_argument("--minutes", type=int, help="自动排班间隔分钟数")
    parser.add_argument("--run-now", action="store_true", help="立即执行一次排班")
    parser.add_argument("--monitor-only", action="store_true", help="仅监控，不执行排班")
    return parser.parse_args()


def signal_handler(sig, frame):
    """信号处理函数"""
    print("\n接收到中断信号，正在停止...")
    stop_monitor()
    sys.exit(0)


def run_schedule_once():
    """执行一次排班"""
    print("开始执行排班...")
    with create_app().app_context():
        result = monitored_auto_schedule()
        print(f"排班完成，结果: {result}")


def main():
    """主函数"""
    # 解析命令行参数
    args = parse_args()
    
    # 设置自动排班间隔
    if args.minutes is not None:
        three_shift_params["auto_schedule_minutes"] = args.minutes
        print(f"设置自动排班间隔为 {args.minutes} 分钟")
    
    # 注册信号处理函数
    signal.signal(signal.SIGINT, signal_handler)
    
    # 启动监控器
    start_monitor()
    
    try:
        # 立即执行一次排班
        if args.run_now and not args.monitor_only:
            run_schedule_once()
        
        # 仅监控模式
        if args.monitor_only:
            print("仅监控模式，不会自动执行排班")
        
        # 保持程序运行
        while True:
            time.sleep(1)
    
    except KeyboardInterrupt:
        print("\n用户中断")
    finally:
        # 停止监控器
        stop_monitor()


if __name__ == "__main__":
    main()
